package day0401;

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class YiHuo18 {
    /**
     * 18.分积木 逻辑分析、按位异或运算
     * 输入字符串 s，输出 s 中包含所有整数的最小和
     * Solo 和 koko 是两兄弟，妈妈给了他们一大堆积木，每块积木上都有自己的重量。现在他们想要将这些积分成两堆。哥哥 Solo 负责分配，
     * 弟弟 koko 要求两个人获得的积木总重量"相等”(根据 Koko 的逻辑)，个数不同，不然就会哭，但 koko 只会先将两个数转成二进制再进行加法，
     * 而且总会忘记进位(每个进位都忘记)如当 25 (11101) 加 11 (01011) 时，koko 得到的计算结果是 18 (10010) :
     * <p>
     * 11001
     * + 01011
     * --------
     * 10010
     * Solo 想要尽可能使自己得到的积木总重量最大，且不让 koko 哭
     * <p>
     * 输入描述
     * <p>
     * 第一行是一个整数 N(2≤N≤100)，表示有多少块积木;
     * <p>
     * 第二行为空格分开的 N 个整数Ci(1≤Ci≤106)，表示第 i 块积木的重量
     * <p>
     * 输出描述
     * <p>
     * 如果能让 koko 不哭，输出 Solo 所能获得积木的最大总重量; 否则输出“NO”。
     * <p>
     * 用例
     * 示例
     * 输入：
     * 3
     * 3 5 6
     * 输出：
     * 11
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
            int n = Integer.parseInt(sc.nextLine());
            List<Integer> list = Arrays.stream(sc.nextLine().split(" "))
                    .map(Integer::parseInt)
                    .sorted()
                    .collect(Collectors.toList());
            Integer min = list.get(0);
            int weight = 0;
            int result = 0;
            for (int i = 0; i < n; i++) {
                weight ^= list.get(i);
                result += list.get(i);
            }
            if (weight == 0) {
                System.out.println(result - min);
            } else {
                System.out.println("No");
            }
        }
    }
}
